package br.com.ximp.addessi.server.dao.low;

import com.google.appengine.api.datastore.DatastoreService;
import com.google.appengine.api.datastore.DatastoreServiceFactory;
import com.google.appengine.api.datastore.Entity;
import com.google.appengine.api.datastore.EntityNotFoundException;
import com.google.appengine.api.datastore.Key;
import com.google.appengine.api.datastore.KeyFactory;
import com.google.appengine.api.datastore.Query;

import br.com.ximp.addessi.server.dao.UsuarioDAO;
import br.com.ximp.addessi.shared.entity.Usuario;

public class LowUsuarioDAO extends LowDAO implements UsuarioDAO {
	private static final String USUARIO /*KIND NAME*/ = "Usuario";
	@Override
	public Usuario getByEmail(String email) {
		 Usuario usuario = null;
		 DatastoreService datastore = getDatastore();		 

		 // Or perform a query
		 Query query = new Query(USUARIO);
		 query.addFilter("email", Query.FilterOperator.EQUAL, email);
		 Entity eUsuario = datastore.prepare(query).asSingleEntity();
		 if(eUsuario == null){
			 usuario = new Usuario();
			 usuario.setEmail(email);
			 return fromEntity(toEntity(usuario));			 		 
		 }else {
			 usuario = fromEntity(eUsuario);
		 }
		 return usuario;
	}


	
	public Usuario fromEntity(Entity e) {
		Usuario usuario = new Usuario();
		usuario.setEmail((String) e.getProperty("email"));
		 usuario.setId(Long.valueOf(e.getKey().getId()).intValue());
		return usuario;
	}
	
	public Entity toEntity(Usuario o) {
		DatastoreService ds = getDatastore();
		Entity e = null;
		if(o.getId() == null){
			e = new Entity(USUARIO);
		}else{
			Key k = KeyFactory.createKey(USUARIO, o.getId().longValue());
			try {
				e = ds.get(k);
			} catch (EntityNotFoundException e1) {
				e1.printStackTrace(); //TODO: something...
			}
		}
		e.setProperty("email",o.getEmail());		
		ds.put(e);
		return e;
	}
	
}
